package cn.iocoder.yudao.module.bpm.service.modeltemplate;

import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.modeltemplate.vo.ModelTemplatePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.modeltemplate.vo.ModelTemplateRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.modeltemplate.vo.ModelTemplateSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.modeltemplate.ModelTemplateDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.modeltemplate.ModelTemplateMapper;
import org.flowable.engine.RepositoryService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;

/**
 * 流程模板 Service 实现类
 *
 * @author 数创万维
 */
@Service
@Validated
public class ModelTemplateServiceImpl implements ModelTemplateService {

    @Resource
    private ModelTemplateMapper modelTemplateMapper;

    @Resource
    private RepositoryService repositoryService;

    @Override
    public Long createModelTemplate(ModelTemplateSaveReqVO createReqVO) {
        // 插入
        ModelTemplateDO modelTemplate = BeanUtils.toBean(createReqVO, ModelTemplateDO.class);
        modelTemplateMapper.insert(modelTemplate);
        // 返回
        return modelTemplate.getId();
    }

//    @Override
//    public void updateModelTemplate(ModelTemplateSaveReqVO updateReqVO) {
//        // 校验存在
//        validateModelTemplateExists(updateReqVO.getId());
//        // 更新
//        ModelTemplateDO updateObj = BeanUtils.toBean(updateReqVO, ModelTemplateDO.class);
//        modelTemplateMapper.updateById(updateObj);
//    }

    @Override
    public void deleteModelTemplate(Long id) {
        // 校验存在
//        validateModelTemplateExists(id);
        // 删除
        modelTemplateMapper.deleteById(id);
    }

//    private void validateModelTemplateExists(Long id) {
//        if (modelTemplateMapper.selectById(id) == null) {
//            throw exception(MODEL_TEMPLATE_NOT_EXISTS);
//        }
//    }

    @Override
    public ModelTemplateRespVO getModelTemplate(Long id) {
        ModelTemplateDO modelTemplateDO = modelTemplateMapper.selectById(id);
        byte[] modelEditorSource = repositoryService.getModelEditorSource(modelTemplateDO.getModelId());
        ModelTemplateRespVO respVO = BeanUtils.toBean(modelTemplateDO, ModelTemplateRespVO.class);
        respVO.setBpmnXml(StrUtil.utf8Str(modelEditorSource));
        return respVO;
    }

    @Override
    public String getModelTemplateXml(String id) {
        byte[] modelEditorSource = repositoryService.getModelEditorSource(id);
        return StrUtil.utf8Str(modelEditorSource);
    }

    @Override
    public PageResult<ModelTemplateDO> getModelTemplatePage(ModelTemplatePageReqVO pageReqVO) {
        return modelTemplateMapper.selectPage(pageReqVO);
    }

}